package com.smart.community.property.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.smart.community.commons.base.BaseEntity;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 费用规则实体类
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》Entity规范实现：
 * - 继承BaseEntity：获得标准字段（id、createTime、updateTime、createBy、updateBy、version、deleted）
 * - 功能单一原则：Entity类必须是单纯的数据库字段映射的Bean对象，功能必须单一
 * - 禁止枚举类：所有枚举字段都使用Integer类型存储，避免使用枚举类
 * - 禁止工具方法：只保留基本的getter/setter方法，禁止添加工具方法
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 字段映射：使用@TableField注解正确映射数据库字段
 * 
 * @author Wu.Liang
 * @since 2024-12-21
 * @version 3.0.0 - 根据新Entity规范调整
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sc_fee_rule")
@Schema(description = "费用规则实体")
public class FeeRule extends BaseEntity {
    private static final long serialVersionUID = 9021333843176070684L;

    /**
     * 规则名称
     */
    @Schema(description = "规则名称")
    @NotNull(message = "规则名称不能为空")
    @TableField("rule_name")
    private String ruleName;

    /**
     * 费用类型（1-物业费，2-水费，3-电费，4-燃气费，5-卫生费）
     */
    @Schema(description = "费用类型：1-物业费，2-水费，3-电费，4-燃气费，5-卫生费")
    @NotNull(message = "费用类型不能为空")
    @TableField("fee_type")
    private Integer feeType;

    /**
     * 社区ID
     */
    @Schema(description = "社区ID")
    @NotNull(message = "社区ID不能为空")
    @TableField("community_id")
    private Long communityId;

    /**
     * 规则类型（1-按面积，2-按人数，3-按用量，4-固定金额）
     */
    @Schema(description = "规则类型：1-按面积，2-按人数，3-按用量，4-固定金额")
    @NotNull(message = "规则类型不能为空")
    @TableField("rule_type")
    private Integer ruleType;

    /**
     * 单价
     */
    @Schema(description = "单价")
    @TableField("unit_price")
    private BigDecimal unitPrice;

    /**
     * 最小金额
     */
    @Schema(description = "最小金额")
    @TableField("min_amount")
    private BigDecimal minAmount;

    /**
     * 最大金额
     */
    @Schema(description = "最大金额")
    @TableField("max_amount")
    private BigDecimal maxAmount;

    /**
     * 阶梯规则(JSON格式)
     */
    @Schema(description = "阶梯规则(JSON格式)")
    @TableField("tier_rules")
    private String tierRules;

    /**
     * 生效日期
     */
    @Schema(description = "生效日期")
    @NotNull(message = "生效日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("effective_date")
    private LocalDate effectiveDate;

    /**
     * 失效日期
     */
    @Schema(description = "失效日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("expire_date")
    private LocalDate expireDate;

    /**
     * 状态（0-禁用，1-启用）
     */
    @Schema(description = "状态：0-禁用，1-启用")
    @TableField("status")
    private Integer status;

    // 只包含基本的getter/setter方法，不包含任何工具方法
} 